package visual;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SpringLayout;

import model.Juego;
import model.Lugar;
import model.Pista;

public class Lugares extends JFrame{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton lugar1;
	private JButton lugar2;
	private JButton lugar3;
	private JButton cancelar;
	
	private Lugar lug1;
	private Lugar lug2;
	private Lugar lug3;
	
	private JPanel panel;
	private Juego juego;
	private Pista pista;
 
	private InterfazPrincipal interfazContenedora;
	
	public Lugares(Juego juego, InterfazPrincipal ip){
		super("Lugares");
		this.juego = juego;
		this.interfazContenedora = ip;
		setBounds(700, 200, 360, 150);
		SpringLayout layout = new SpringLayout();
		panel = new JPanel(layout);
		lug1 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Banco");
		lug2 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Biblioteca");
		lug3 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Aeropuerto");
		
//Handler
		Handler handler = new Handler();
		
		lugar1 = new JButton(lug1.obtenerNombre().toUpperCase());
		lugar1.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, lugar1, 20, SpringLayout.WEST, panel);
		layout.putConstraint(SpringLayout.NORTH, lugar1, 5,  SpringLayout.NORTH, panel);
		
		
		lugar2 = new JButton(lug2.obtenerNombre().toUpperCase());
		lugar2.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, lugar2, 5, SpringLayout.EAST, lugar1);
		layout.putConstraint(SpringLayout.NORTH, lugar2, 5,  SpringLayout.NORTH, panel);
		
		lugar3 = new JButton(lug3.obtenerNombre().toUpperCase());
		lugar3.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, lugar3, 5, SpringLayout.EAST, lugar2);
		layout.putConstraint(SpringLayout.NORTH, lugar3, 5,  SpringLayout.NORTH, panel);
		
		cancelar = new JButton("VOLVER");
		cancelar.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, cancelar, 15, SpringLayout.EAST, lugar1);
		layout.putConstraint(SpringLayout.NORTH, cancelar, 25,  SpringLayout.SOUTH, lugar2);
		
		
		panel.add(lugar1);
		panel.add(lugar2);
		panel.add(lugar3);
		panel.add(cancelar);
		add(panel);	
	}
	
		private class Handler implements ActionListener {
		
		public void actionPerformed(ActionEvent event){
					
			if(event.getSource() == lugar1){
				pista = juego.moverJugadorALugar(lug1);
				if(estanEnElMismoLugar()){
					condicionDelJuego();
				}else{
				JOptionPane.showMessageDialog(null, pista.obetenerDescripcion());
				interfazContenedora.actualizarInterfaz();
				}
			}	
			else{ if(event.getSource() == lugar2){
				pista = juego.moverJugadorALugar(lug2);
				if(estanEnElMismoLugar()){
					condicionDelJuego();
				}else{
				JOptionPane.showMessageDialog(null, pista.obetenerDescripcion());
				interfazContenedora.actualizarInterfaz();	
				  }
			}
				  else{ if(event.getSource() == lugar3){
						pista = juego.moverJugadorALugar(lug3);
						if(estanEnElMismoLugar()){
							condicionDelJuego();
						}else{
						JOptionPane.showMessageDialog(null, pista.obetenerDescripcion());
						interfazContenedora.actualizarInterfaz();	   		
				  		}
				  }
				  		else{if(event.getSource() == cancelar){
				  			interfazContenedora.actualizarInterfaz();
				  			dispose();
				  			}
				  		}
				  }
			}
		}
		}
		
		
		public void actualizarLugares(){
			lug1 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Banco"); 
			lug2 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Biblioteca");
			lug3 = juego.obtenerJugador().obtenerCiudadActual().obtenerLugar("Aeropuerto");
		}
		
		public boolean estanEnElMismoLugar(){
			return ((juego.obtenerJugador().obtenerCiudadActual() == juego.obtenerLadron().obtenerUltimoDestino()) && (juego.obtenerJugador().obtenerLugarActual() == juego.obtenerLadron().obtenerLugarActual()));
		}
		
		public void condicionDelJuego(){
			boolean condicion = juego.verificarLadron();
			if (condicion){
				JOptionPane.showMessageDialog(null, "Lo has atrapado. Bien Hecho!"); opcionContinuar();
			}else{
				JOptionPane.showMessageDialog(null, "Lo encontraste, pero no tenias una orden de arresto."); opcionContinuar();
			}
		}
		
		public void opcionContinuar(){
			final JFrame continuar = new JFrame("Continuar?");
			continuar.setLayout(new FlowLayout());
			continuar.setBounds(700, 200, 200, 100);
			JButton si = new JButton("Si");
			si.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				juego.ActualizarJuegoSegunRango();
				interfazContenedora.actualizarInterfaz();
				continuar.dispose();
				dispose();	
				
			}
								}
			);
			
			JButton no = new JButton("No");
			no.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent event){
					interfazContenedora.terminar();
					System.exit(-1);
				}
									}
				);
			
			continuar.add(si);
			continuar.add(no);
			continuar.setVisible(true);
		}

}
